import {
  BIND_USER,
  BIND_LOADING,
  BIND_WXINITSTEP,
  BIND_DEVID
} from '../store/mutation-types'
// const wx = require('weixin-js-sdk')

const modulesFiles = require.context('./modules', false, /\.js$/)
const routes = []
modulesFiles.keys().forEach(key => {
  modulesFiles(key).default.forEach(item => {
    routes.push(item)
  })
})

export const routerConfig = {
  routes,
  mode: 'history',
  strict: process.env.NODE_ENV !== 'production'
  // scrollBehavior (to, from, savedPosition) {
  //   if (savedPosition) {
  //     return savedPosition
  //   }
  //   if (from.meta.keepAlive === true) {
  //     from.meta.savedPosition = document.body.scrollTop
  //   }
  //   return {
  //     x: 0,
  //     y: to.meta.savedPosition || 0
  //   }
  // }
}

export const routerBefore = function (Vue, store) {
  // 小程序跳转
  // const minNavigateTo = Vue.prototype.$lang.promise({
  //   fn: wx.miniProgram.getEnv,
  //   target: wx.miniProgram,
  //   nodejs: false
  // })
  // 获取步骤
  const getStep = function () {
    return Vue.prototype.$cache.getCache(Vue.prototype.$cache.keys.wxInitStep)
  }
  // 设置步骤
  const setStep = function (flag) {
    store.commit(BIND_WXINITSTEP, flag)
  }
  const wxLogin = async function (to) {
    // 获取当前步骤，为null是没有进行登陆过，最初是的状态，置为0
    let step = getStep()
    if (step === null || step === undefined || step - 2 === 0) {
      setStep(0)
      step = 0
    }
    // alert(step)
    // if (!this.$env.isProd) {
    //   return
    // }
    // alert(step)
    // 微信标识
    // 如果是微信
    // 如果有 微信授权code，而且本地没有用户信息???，请求接口登录
    // 获取openid:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
    // 如果是0，进行第一次请求，此次是静默授权，微信参数：scope=snsapi_base
    // 如果返回的对象members有值，代表我授权过，不需要授权。
    // 如果返回的对象members为null,代表我从没授权过，需要进行授权登录

    if (step - 0 === 0) {
      // 获取用户信息
      try {
        let user = await Vue.prototype.$ajax.post('/login/loginByWxCode.json', {
          authCode: to.query.code
        })
        // alert(JSON.stringify(user))
        // 判断members是不是空
        if (user && user.members) {
          // 不是空的，保存用户信息，标识设置为2，代表完成微信登录
          store.commit(BIND_USER, user.members)
          if (user.members.devid) {
            store.commit(BIND_DEVID, user.members.devid)
          }
          setStep(2)
        } else {
          // 是空的，需要进行微信授权登录，标识置为1，准备第二次授权
          setStep(1)
          // 第二次授权，参数为0是第一次静默授权，参数为1是第二次登录授权
          Vue.prototype.$wxInit(1)
        }
      } catch (e) {
        // 是空的，需要进行微信授权登录，标识置为1，准备第二次授权
        setStep(1)
        // 第二次授权，参数为0是第一次静默授权，参数为1是第二次登录授权
        Vue.prototype.$wxInit(1)
      }
    } else if (step - 1 === 0) {
      // 进行登录授权
      try {
        let user = await Vue.prototype.$ajax.post('/login/loginByWxCode.json', {
          authCode: to.query.code
        })
        if (user && user.members) {
          // 保存用户信息，标识置为2，完成授权
          store.commit(BIND_USER, user.members)
          if (user.members.devid) {
            store.commit(BIND_DEVID, user.members.devid)
          }
          setStep(2)
        }
      } catch (e) {
        // 是空的，需要进行微信授权登录，标识置为1，准备第二次授权
        setStep(1)
        // 第二次授权，参数为0是第一次静默授权，参数为1是第二次登录授权
        Vue.prototype.$wxInit(1)
      }
    }
  }

  return async function (to, from, next) {
    if (!to) {
      // 拦截错误请求
      return next(false)
    }
    // 加载开始
    // loading 类型
    store.commit(BIND_LOADING, true)
    // 缓存中获取用户信息
    if (!store.state.user) {
      let user = Vue.prototype.$cache.getCache(Vue.prototype.$cache.keys.user)
      if (user && user.length > 0) {
        store.commit(BIND_USER, JSON.parse(user))
      }
      let devid = Vue.prototype.$cache.getCache(Vue.prototype.$cache.keys.devid)
      if (devid && devid.length > 0) {
        store.commit(BIND_DEVID, devid)
      }
    }
    console.error(Vue.prototype.$env.PC)
    console.error(Vue.prototype)
    // 用户自动登录处理
    if (!store.state.user || !store.state.devid) {
      if (Vue.prototype.$env.isWX && window.location.hostname.indexOf('10') === -1) {
        // 微信处理方式
        // 首先，判断是否有code
        if (to.query.code) {
          await wxLogin(to)
        } else {
          // 否则先静默授权
          Vue.prototype.$wxInit(0)
          return
        }
      } else if (!Vue.prototype.$env.isWX) {
        // 非微信、非生产或者是PC编辑时，模拟用户登录
        let user = await Vue.prototype.$ajax.post('/login/loginByWxCode.json', {
          authCode: Vue.prototype.$PC ? 'bbbb' : 'cccc'
        })
        if (user && user.members) {
          store.commit(BIND_USER, user.members)
          if (user.members.devid) {
            store.commit(BIND_DEVID, user.members.devid)
          }
        }
        // 标记登录成功
        setStep(2)
      }
    } else {
      setStep(2)
    }

    // // 分享相关
    // if (Vue.prototype.$env.isWX) {
    //   if (!to.meta.shareCurrent) {
    //     // 自动分享
    //     if (!to.meta.noAutoShare) {
    //       Vue.prototype.$wxShare({
    //         link: window.location.origin
    //       })
    //     }
    //   } else {
    //     // 不分享首页 自动分享
    //     if (!to.meta.noAutoShare) {
    //       Vue.prototype.$wxShare()
    //     }
    //   }
    // }

    // 标题相关
    if (to.meta.title) {
      document.title = to.meta.title
    }
    // 检测通过
    // try {
    //   const res = await minNavigateTo()
    //   if (res.miniprogram && to.path !== window.location.pathname) {
    //     wx.miniProgram.navigateTo({ url: '/pages/index2/index' })
    //     // 加载开始
    //     store.commit(BIND_LOADING, false)
    //     // return false
    //     return next(false)
    //   }
    // } catch (e) {
    //   console.log(e)
    // }
    // if (window.__wxjs_is_wkwebview === true && to.path !== location.pathname) {
    //   location.assign(to.fullPath) // 此处不可使用location.replace
    // }
    //  else {
    //   next()
    // }
    next()
  }
}

export const routerAfter = function (Vue, store) {
  return async function (to, from, next) {
    if (window.__wxjs_is_wkwebview === true && to.path !== location.pathname) {
      location.assign(to.fullPath) // 此处不可使用location.replace
    }
  }
}
